package com.itheima.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.CheckGroupDao;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.pojo.CheckGroup;
import com.itheima.service.CheckGroupService;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

//检查组服务
@Service(interfaceClass = CheckGroupService.class)
@Transactional
public class CheckGroupServiceImpl implements CheckGroupService {
//   新增检查组，同时需要让检查组关联检查项
    @Autowired
    private CheckGroupDao checkGroupDao;
        @Override
    public void add(CheckGroup checkGroup, Integer[] checkitemIds) {
//        新增检查组，操作t_checkgroup表
            checkGroupDao.add(checkGroup);
//        设置检查组和检查项的多对多的关联关系，操作t_checkgroup_checkitem表
            addCheckgroupAndCheckItem(checkGroup, checkitemIds);
        }

    private void addCheckgroupAndCheckItem(CheckGroup checkGroup, Integer[] checkitemIds) {
        Integer checkGroupId = checkGroup.getId();
        if (checkitemIds !=null&& checkitemIds.length>0){
            for (Integer checkitemId : checkitemIds) {
                Map<String,Integer> map= new HashMap<>();
                map.put("checkgroupId", checkGroupId);
                map.put("checkitemId", checkitemId);
                checkGroupDao.setCheckGroupAndCheckItem(map);
            }
        }
    }

    //  分页查询的功能
    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {
        Integer pageSize = queryPageBean.getPageSize();
        Integer currentPage = queryPageBean.getCurrentPage();
        String queryString = queryPageBean.getQueryString();
        PageHelper.startPage(currentPage, pageSize);
        Page<CheckGroup> page = checkGroupDao.findPage(queryString);
        long total = page.getTotal();
        List<CheckGroup> result = page.getResult();
        return new PageResult(total,result);
    }

//  根据id查找检查组的信息
    @Override
    public CheckGroup findGroupById(Integer id) {
        CheckGroup groupById = checkGroupDao.findGroupById(id);
        return groupById;
    }
//  根据id 查找检查组对应有多少个检查项
    @Override
    public List<Integer> findCheckItemByCheckGroupId(Integer id) {
            List<Integer> checkItemIds =checkGroupDao.findCheckItemByCheckGroupId(id);
        return checkItemIds;
    }
//    编辑后台的检查组的信息
    public void edit(CheckGroup checkGroup, Integer[] checkitemIds){
//            设置 检查组的基本信息
        checkGroupDao.setCheckGroup(checkGroup);
//        删除关联表中对应的检查组的所有信息
        checkGroupDao.deleteGroupAndCheckItem(checkGroup.getId());
//        将新的对应关系添加到关联表中
        this.addCheckgroupAndCheckItem(checkGroup,checkitemIds);
    }
//  删除检查组和关联表中的数据
    @Override
    public void deleteGroupById(Integer id) {
        //        删除关联表中对应的检查组的所有信息
        checkGroupDao.deleteGroupAndCheckItem(id);
//        删除检查组中的数据
        checkGroupDao.deleteGroup(id);
    }

    @Override
    public List<CheckGroup> findAllGroups() {
        return checkGroupDao.findAllGroups();
    }
}
